import request from "@/utils/request";

const baseUrl = "core/message";
const messageApi = {
  /**
   * 消息列表查询分页
   * @param params
   * @returns
   */
  getMessageList(params: MessagePageQuery) {
    const query = encodeURIComponent(JSON.stringify(params));
    return request<any, PageResult<MessagePageVO[]>>({
      url: `${baseUrl}/getMessages?object=${query}`,
      method: "get",
    });
  },

  // 获取消息详情
  getMessage(id: number) {
    return request<any, MessageDetailVO>({
      url: `${baseUrl}/getMessageDetail?id=${id}`,
      method: "get",
    });
  },

  // 新增消息
  addMessage(data: MessageForm) {
    return request<any, MessageDetailVO>({
      url: `${baseUrl}/createMessage`,
      method: "post",
      data,
    });
  },

  // 修改消息
  updateMessage(data: MessageForm) {
    return request<any, MessageDetailVO>({
      url: `${baseUrl}/updateMessage`,
      method: "post",
      data,
    });
  },

  // 删除消息
  deleteMessage(id: number) {
    return request<any, any>({
      url: `${baseUrl}/deleteMessage?id=${id}`,
      method: "post",
    });
  },

  // 发布消息
  publishMessage(id: number) {
    return request<any, any>({
      url: `${baseUrl}/publishMessage?id=${id}`,
      method: "post",
    });
  },

  // 撤回消息
  revokeMessage(id: number) {
    return request<any, any>({
      url: `${baseUrl}/recallMessage?id=${id}`,
      method: "post",
    });
  },
};
export default messageApi;

export interface MessagePageQuery extends PageQuery {
  title?: string;
  status?: number;
  msgType?: number;
  msgLevel?: number;
}

/** 通知公告表单对象 */
export interface MessageForm {
  id: number;
  /** 通知标题 */
  title: string;
  /** 通知内容 */
  content: string;
  /** 通知类型 */
  msgType: number;
  /** 优先级(0=低，1=中，2=高) */
  msgLevel: number;
  /** 目标类型(0=全体,1=指定角色,2=指定用户,3=指定用户和角色) */
  targetType: number;
  /** 目标ID合集，以,分割 */
  targetUserIds?: number[];
  /** 目标角色ID合集，以,分割 */
  targetRoleIds?: number[];
}

/** 通知公告分页对象 */
export interface MessagePageVO {
  content: string; // 消息内容
  createTime: string; // 创建时间
  id: number; // 消息ID
  msgLevel: number; // 消息等级
  msgType: number; // 消息类型
  publishTime: string; // 发布时间
  status: number; // 发布状态
  targetRoleIds: number[]; // 目标角色ID合集
  targetType: number; // 目标类型
  targetUserIds: number[]; // 目标用户ID合集
  title: string; // 消息标题
  publisherName: string; // 发布者名称
}

export interface MessageDetailVO {
  content: string; // 消息内容
  createTime: string; // 创建时间
  id: number; // 消息ID
  msgLevel: number; // 消息等级
  msgType: number; // 消息类型
  publishTime: string; // 发布时间
  status: number; // 发布状态
  targetRoleIds: number[]; // 目标角色ID合集
  targetType: number; // 目标类型
  targetUserIds: number[]; // 目标用户ID合集
  title: string; // 消息标题
  updateTime: string; // 更新时间
  createName: string; // 发布者名称
}
